#ifndef MOSES_ITEM_H
#define MOSES_ITEM_H

#include <cassert>
#include "Visitor.h"

extern int lines_vb;

#define MOSES_ITEM_VISITABLE() virtual void Visit(Visitor *pVisitor) { pVisitor->Accept(this); }

namespace moses
{	
	
	class Item
	{
	public:
		Item() : m_line(lines_vb)						{}
		virtual	~Item()									{}
		
		virtual	void	Visit(Visitor *pVisitor)		{ assert(false); };
		unsigned int	LineNo()				const	{ return m_line; }
	
	private:
		unsigned int	m_line;
	};
}

#endif
